package pe.gob.mininter.dirandro.vaadin.panel.caso;

import java.util.Date;

import pe.gob.mininter.dirandro.model.Caso;
import pe.gob.mininter.dirandro.service.CasoService;
import pe.gob.mininter.dirandro.util.BeanValidar;
import pe.gob.mininter.dirandro.util.Constante;
import pe.gob.mininter.dirandro.util.HarecUtil;
import pe.gob.mininter.dirandro.vaadin.dialogs.AlertDialog;
import pe.gob.mininter.dirandro.vaadin.util.ComboBoxLOVS;
import pe.gob.mininter.dirandro.vaadin.util.Injector;

import com.vaadin.annotations.AutoGenerated;
import com.vaadin.ui.Alignment;
import com.vaadin.ui.Button;
import com.vaadin.ui.Button.ClickEvent;
import com.vaadin.ui.Button.ClickListener;
import com.vaadin.ui.CustomComponent;
import com.vaadin.ui.HorizontalLayout;
import com.vaadin.ui.Label;
import com.vaadin.ui.PopupDateField;
import com.vaadin.ui.TextArea;
import com.vaadin.ui.TextField;
import com.vaadin.ui.VerticalLayout;

public class PanelRegistroCasoPrincipal extends CustomComponent implements ClickListener{

	/*- VaadinEditorProperties={"grid":"RegularGrid,20","showGrid":true,"snapToGrid":true,"snapToObject":true,"movingGuides":false,"snappingDistance":10} */

	@AutoGenerated
	private VerticalLayout mainLayout;
	@AutoGenerated
	private HorizontalLayout lytButton;
	@AutoGenerated
	private Button btnLimpiar;
	@AutoGenerated
	private Button btnGrabar;
	@AutoGenerated
	private PopupDateField dtSituacion;
	@AutoGenerated
	private ComboBoxLOVS cmbSituacion;
	@AutoGenerated
	private TextArea txtDescrpcion;
	@AutoGenerated
	private TextField txtNombre;
	@AutoGenerated
	private Label lblNumero;
	private static final long serialVersionUID = -6728634845856075495L;
	private PanelRegistroCaso padre;
	private CasoService casoService;
	private Caso caso;	
	
	public Caso getCaso() {
		return caso;
	}
	public void setCaso(Caso caso) {
		this.caso = caso;
	}
	public PanelRegistroCaso getPadre() {
		return padre;
	}
	public void setPadre(PanelRegistroCaso padre) {
		this.padre = padre;
	}
	/**
	 * The constructor should first build the main layout, set the
	 * composition root and then do any custom initialization.
	 *
	 * The constructor will not be automatically regenerated by the
	 * visual editor.
	 */
	public PanelRegistroCasoPrincipal() {
		buildMainLayout();
		setCompositionRoot(mainLayout);
		casoService = Injector.obtenerServicio(CasoService.class);
		postConstruct();
	}

	public void postConstruct(){
		
		limpiar();
		habilitarEdicion(false);
		
		lblNumero.setValue("");
		cmbSituacion.setInputPrompt("Situación");
		cmbSituacion.setRequired(true);
		cmbSituacion.setCodigoLista(Constante.LISTA.CODIGO.SITUACION_GENERAL);
		cmbSituacion.attach();
		
		btnGrabar.addListener((ClickListener)this);
		btnLimpiar.addListener((ClickListener)this);
		
	}
	
	public void cargarFormulario(){
		if(caso!=null){
			txtDescrpcion.setValue(caso.getDescripcion());
			txtNombre.setValue(caso.getNombre());
			lblNumero.setValue(caso.getNroCaso());
			dtSituacion.setValue(caso.getFecha());
			cmbSituacion.select(caso.getSituacion());
		}
		
	}
	
	@Override
	public void buttonClick(ClickEvent event) {
		if(event.getButton().equals(btnGrabar)) {
			grabarCaso();
		}
		if(event.getButton().equals(btnLimpiar)) {
			limpiar();
		}
	}
	
	public void grabarCaso(){
		System.out.println("descripcion caso "+txtDescrpcion.getValue());
		
		caso.setDescripcion((String)txtDescrpcion.getValue());
		caso.setNombre((String)txtNombre.getValue());
		caso.setSituacion(cmbSituacion.getValor());
		caso.setFecha((Date)dtSituacion.getValue());
		
		HarecUtil.validar(getWindow(), caso, new BeanValidar[]{
        	new BeanValidar("nombre", new Object[]{"Nombre"}, txtNombre),
        	new BeanValidar("descripcion", new Object[]{"Descripción"}, txtDescrpcion),
        	new BeanValidar("situacion", new Object[]{"Situación"}, cmbSituacion),
        	new BeanValidar("fecha", new Object[]{"Fecha de registro"}, dtSituacion)
        });
		
		AlertDialog alertDialog =null;
		if(caso.esNuevo()){
			casoService.registrarCaso(caso);
			padre.habilitarTab(true);
			lblNumero.setValue(caso.getNroCaso());
			alertDialog = new  AlertDialog("Registro de Caso", "Se ha registrado el Caso correctamente", "Aceptar", "400");
		}else{
			casoService.actualizar(caso);	
			alertDialog = new  AlertDialog("Actualización de Caso", "Se ha actualizado el Caso correctamente", "Aceptar", "400");
		}		
		getApplication().getMainWindow().addWindow(alertDialog);
		habilitarEdicion(true);
		padre.setCaso(caso);
		
	}
	
	public void limpiar(){
		caso = new Caso();
		txtDescrpcion.setValue("");
		txtNombre.setValue("");
		dtSituacion.setValue(null);
		cmbSituacion.select(null);
	}
	
	private void habilitarEdicion(boolean flag){
		if(flag){
			btnGrabar.setCaption("Actualizar Caso");
		}
		else{
			btnGrabar.setCaption("Crear Caso");
		}
	}
	
	@AutoGenerated
	private VerticalLayout buildMainLayout() {
		// common part: create layout
		mainLayout = new VerticalLayout();
		mainLayout.setImmediate(false);
		mainLayout.setWidth("100%");
		mainLayout.setHeight("-1px");
		mainLayout.setMargin(true);
		mainLayout.setSpacing(true);
		
		// top-level component properties
		setWidth("100.0%");
		setHeight("-1px");
		
		// lblNumero
		lblNumero = new Label();
		lblNumero.setCaption("Número de Caso");
		lblNumero.setImmediate(false);
		lblNumero.setWidth("600px");
		lblNumero.setHeight("-1px");
		lblNumero.setValue("Label");
		mainLayout.addComponent(lblNumero);
		
		// txtNombre
		txtNombre = new TextField();
		txtNombre.setCaption("Nombre del Caso");
		txtNombre.setImmediate(false);
		txtNombre.setWidth("600px");
		txtNombre.setHeight("-1px");
		txtNombre.setRequired(true);
		txtNombre.setInputPrompt("Nombre del Caso");
		mainLayout.addComponent(txtNombre);
		
		// txtDescrpcion
		txtDescrpcion = new TextArea();
		txtDescrpcion.setCaption("Descripción del Caso");
		txtDescrpcion.setImmediate(false);
		txtDescrpcion.setWidth("600px");
		txtDescrpcion.setHeight("-1px");
		txtDescrpcion.setRequired(true);
		txtDescrpcion.setInputPrompt("Descripción del caso ");
		mainLayout.addComponent(txtDescrpcion);
		
		// cmbSituacion
		cmbSituacion = new ComboBoxLOVS();
		cmbSituacion.setCaption("Situación del Caso");
		cmbSituacion.setImmediate(false);
		cmbSituacion.setWidth("200px");
		cmbSituacion.setHeight("-1px");
		mainLayout.addComponent(cmbSituacion);
		
		// dtSituacion
		dtSituacion = new PopupDateField();
		dtSituacion.setCaption("Fecha");
		dtSituacion.setImmediate(false);
		dtSituacion.setWidth("200px");
		dtSituacion.setHeight("-1px");
		dtSituacion.setRequired(true);
		dtSituacion.setResolution(4);
		mainLayout.addComponent(dtSituacion);
		
		// lytButton
		lytButton = buildLytButton();
		mainLayout.addComponent(lytButton);
		
		return mainLayout;
	}
	@AutoGenerated
	private HorizontalLayout buildLytButton() {
		// common part: create layout
		lytButton = new HorizontalLayout();
		lytButton.setImmediate(false);
		lytButton.setWidth("100.0%");
		lytButton.setHeight("-1px");
		lytButton.setMargin(false);
		lytButton.setSpacing(true);
		
		// btnGrabar
		btnGrabar = new Button();
		btnGrabar.setCaption("Grabar");
		btnGrabar.setImmediate(true);
		btnGrabar.setWidth("-1px");
		btnGrabar.setHeight("-1px");
		lytButton.addComponent(btnGrabar);
		lytButton.setComponentAlignment(btnGrabar, new Alignment(6));
		
		// btnLimpiar
		btnLimpiar = new Button();
		btnLimpiar.setCaption("Limpiar");
		btnLimpiar.setImmediate(true);
		btnLimpiar.setWidth("-1px");
		btnLimpiar.setHeight("-1px");
		lytButton.addComponent(btnLimpiar);
		
		return lytButton;
	}
	

}
